package com.cch.check.controller;


import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.MatchMode;
import com.aliyun.oss.model.PolicyConditions;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
@CrossOrigin
@RestController
public class OSSController {

    @RequestMapping("check/policy")
    public Map<String,String> policy(){
    String accessId = "LTAI5tJCvxgFy9g3yyYoJNPm"; // 请填写您的AccessKeyId。
    String accessKey = "TPJ30wybrLXmyb1zcZXhks8wbjbLak"; // 请填写您的AccessKeySecret。
    String endpoint = "oss-cn-beijing.aliyuncs.com"; // 请填写您的 endpoint。
    String bucketName = "cchcheck"; // 请填写您的 bucketname 。
    String host = "https://" + bucketName + "." + endpoint; // host的格式为 bucketname.endpoint
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String date = simpleDateFormat.format(new Date());
    String dir = "cch/"+date+"/"; // 用户上传文件时指定的前缀。

    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);
        try {
        long expireTime = 30;
        long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
        Date expiration = new Date(expireEndTime);
        // PostObject请求最大可支持的文件大小为5 GB，即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
        PolicyConditions policyConds = new PolicyConditions();
        policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
        policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);

        String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
        byte[] binaryData = postPolicy.getBytes("utf-8");
        String encodedPolicy = BinaryUtil.toBase64String(binaryData);
        String postSignature = ossClient.calculatePostSignature(postPolicy);

        Map<String, String> respMap = new LinkedHashMap<String, String>();
        respMap.put("accessId", accessId);
        respMap.put("policy", encodedPolicy);
        respMap.put("signature", postSignature);
        respMap.put("dir", dir);
        respMap.put("host", host);
        respMap.put("expire", String.valueOf(expireEndTime / 1000));
        // respMap.put("expire", formatISO8601Date(expiration));
        return respMap;
    } catch (Exception e) {
        // Assert.fail(e.getMessage());
        System.out.println(e.getMessage());
    }
        return null;
}



}
